package cn.changein.framework.modular.templateInfo.service.impl;

import cn.changein.framework.base.pojo.page.PageFactory;
import cn.changein.framework.base.pojo.page.PageInfo;
import cn.changein.framework.kernel.model.response.ResponseData;
import cn.changein.framework.modular.system.mapper.TemplateInfoMapper;
import cn.changein.framework.modular.templateInfo.entity.TemplateInfo;
import cn.changein.framework.modular.templateInfo.model.params.TemplateInfoParam;
import cn.changein.framework.modular.templateInfo.model.result.TemplateInfoResult;
import cn.changein.framework.modular.templateInfo.service.TemplateInfoService;
import cn.changein.framework.util.ToolUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 导入模板表 服务实现类
 * </p>
 *

 * @Date 2020-11-27
 * @Copyright: companyName
 * @Version 1.0
 * @Since JDK1.8
 */
@Service
public class TemplateInfoServiceImpl extends ServiceImpl<TemplateInfoMapper, TemplateInfo> implements TemplateInfoService {

    //绑定文件上传路径到uploadPath
    @Value("${file.uploadPath}")
    private String uploadPath;

    @Override
    public void add(TemplateInfoParam param){
        TemplateInfo entity = getEntity(param);
        this.save(entity);
    }

    @Override
    public void delete(TemplateInfoParam param){
        this.removeById(getKey(param));
    }

    @Override
    public void update(TemplateInfoParam param){
        TemplateInfo oldEntity = getOldEntity(param);
        TemplateInfo newEntity = getEntity(param);
        ToolUtil.copyProperties(newEntity, oldEntity);
        this.updateById(newEntity);
    }

    @Override
    public TemplateInfoResult findBySpec(TemplateInfoParam param){
        return null;
    }

    @Override
    public List<TemplateInfoResult> findListBySpec(TemplateInfoParam param){
        return null;
    }

    @Override
    public PageInfo findPageBySpec(TemplateInfoParam param){
        Page pageContext = getPageContext();
        IPage page = this.baseMapper.customPageList(pageContext, param);
        return PageFactory.createPageInfo(page);
    }

    /*

     * @Description //TODO 新增导入模板信息
     * @Date 2020-11-27 13:23
     * @MethodName saveTemplateInfo
     * @Param [templateInfoParam, filePath 为yml文件配置的路径信息, filename, tempFile]
     * @return boolean
     **/
    @Override
    public boolean saveOrUpdateTemplateInfo(TemplateInfoParam templateInfoParam, String filename, File tempFile) {
        templateInfoParam.setFileName(filename);
        templateInfoParam.setFilePath(tempFile.getPath());
        templateInfoParam.setFinalName(filename);
        templateInfoParam.setFilePath(tempFile.getPath());
        templateInfoParam.setSrcPath("\\file\\"+uploadPath+"\\"+"TEMPLATE\\"+filename);
        if (templateInfoParam.getId()!=null){
            return this.updateById(getEntity(templateInfoParam));
        }else {
            return this.save(getEntity(templateInfoParam));
        }
    }

    @Override
    public ResponseData validateTemplate(TemplateInfoParam templateInfoParam) {
        String templateCode = templateInfoParam.getTemplateCode();
        if (!StringUtils.isEmpty(templateCode)) {
            List<TemplateInfoResult> templateInfoResults = this.baseMapper.validateTemplateInfo(templateInfoParam);
            if (templateInfoResults.size()>0){
                return ResponseData.error("已存在编号为"+templateCode+"的模板！");
            }else {
                return ResponseData.success();
            }
        }
        return ResponseData.error("模板名称不存在！");
    }

    @Override
    public TemplateInfo getTemplateinfoByCode(String templateCode) {
        return this.getBaseMapper().getTemplateinfoByCode(templateCode);
    }

    @Override
    public ResponseData getTemplateInfoByCode(String templateCode) {
        TemplateInfo templateInfo = this.getTemplateinfoByCode(templateCode);
        if (templateInfo != null) {
            return ResponseData.success(templateInfo);
        }else {
            return ResponseData.error("模板信息不存在，请前往模板管理界面新增信息");
        }
    }

    private Serializable getKey(TemplateInfoParam param){
        return param.getId();
    }

    private Page getPageContext() {
        return PageFactory.defaultPage();
    }

    private TemplateInfo getOldEntity(TemplateInfoParam param) {
        return this.getById(getKey(param));
    }

    private TemplateInfo getEntity(TemplateInfoParam param) {
        TemplateInfo entity = new TemplateInfo();
        ToolUtil.copyProperties(param, entity);
        return entity;
    }
}
